/**
 * 储存用户信息： token、个人信息
 */
// 导入登录接口
import { loginAPI, getUserInfoApI, getUserDetailByIdAPI } from '@/api/user'

import { getToken, setToken, removeToken } from '@/utils/auth.js'
export default {
  // 模块化枷锁
  namespaced: true,
  // 1.定义变量
  state: {
    // 先从本地获取token，如果没有就走空
    token: getToken() || '',
    userInfo: {}
  },
  // 2.修改变量（同步）
  mutations: {
    // 存储token
    setToken(state, val) {
      // 获取到传入的token
      state.token = val
      // 防止刷新后token没了，在硬盘存储一份
      setToken(val)
    },
    // 删除token
    delToken(state) {
      state.token = ''
      removeToken()
    },
    // 存储用户信息
    setUserInfo(state, info) {
      state.userInfo = info
    },
    // 删除用户信息
    delUserInfo(state) {
      state.userInfo = {}
    }
  },
  // 3.调用后台接口发请求（异步）
  actions: {
    // 调用登录接口并存储token
    async loginActions(ctx, loginForm) {
      // 1. 发请求获取token
      const token = await loginAPI(loginForm)
      console.log(token)
      // 2. 存储token
      // ctx.commit === 等价于 this.$store.commit
      ctx.commit('setToken', token)
    },
    async getUserInfoAction({ commit }, loginForm) {
      // 获取用户个人信息，但是没有头像
      const userInfo = await getUserInfoApI()
      // console.log('获取用户信息:', userInfo)
      // 获取用户头像信息，重新调用一个接口
      const avatorInfo = await getUserDetailByIdAPI(userInfo.userId)
      // console.log('获取用户信息:', avatorInfo)
      commit('setUserInfo', { ...userInfo, ...avatorInfo })
    },
    // 退出登录
    logoutAction({ commit }) {
      // 清空token和用户信息
      commit('delToken')
      commit('delUserInfo')
    }
  }
}
